/*
 * @: 服务端入口
 * @version: 1.0
 * @Author: ziwei
 * @Date: 2021-10-16 16:46:22
 * @LastEditors: ziwei
 * @LastEditTime: 2021-10-16 17:05:21
 */
import createApp from './main'

//服务器需要调用当前这个文件产生一个vue实例
export default (context) => {
    return new Promise(()=>{
        //服务端会执行此方法
        const {
            app,router,store
        } = createApp();
        //返回实例 应该跳转到/ bar
        router.push(context.url) //渲染当前页面
        //涉及到异步组件的问题
        router.onReaddy(()=>{
            //获取当前跳转到的匹配的组件
            let matchs = router.getMatchedComponnets()
            //matchs 匹配到所有的组件 整个都在服务端执行
            Promise.all(matchs.map(component=>{
                if(component.asyncData){
                    return component.asyncData(store)
                }
            })).then(()=>{
                //以上all中的方法 会改变store中的state
                context.state = store.state;//把vuex的状态挂在到上下文中，会将状态挂在到windows上
                resolve(app)
                })
            if(matchs.length === 0){
                reject({code:404})
            }
            resolve(app)
        },reject)
        //涉及到异步组件的问题
        return app;
    })
}


//获取数据操作 在服务端获取好完整的数据

//服务端配置好后 需要导出给node使用
//webpack打包原理  就是增加了一个自执行函数